package com.mzx.javase.io;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;

/**
 * 类描述：File文件类的常用方法
 *
 * @ClassName FileTest
 * @Description TODO
 * @Author 马子鑫
 * @Date 2022/7/19 10:50
 * @Version 1.0
 */
public class FileTest {
    public static void main(String[] args) {
        //file在实例化传入路径的时候，无论路径是否存在，都会实例化成功
//        File file = new File("D:\\java\\tempdirectory");
//        System.out.println("是否是目录："+file.isDirectory());
//        System.out.println("是否是文件："+file.isFile());

        //以下为操作目录相关
        File file = new File("D:\\java\\tempdirectory\\testDirectory\\childDirectory");
        //如果说目录不存在的情况下
        if (file.exists()) {
            System.out.println("该目录存在");
        } else {
            boolean mkdir = file.mkdir();
            System.out.println("创建一层目录是否成功：" + mkdir);

            boolean mkdirs = file.mkdirs();
            System.out.println("创建多层目录是否成功：" + mkdirs);
            //经测试，如果多层目录不存在的情况下，只能通过mkdirs来创建多层目录，创建单层目录会失败
        }
        String absolutePath = file.getAbsolutePath();
        System.out.println("该目录的绝对路径为：" + absolutePath);

        //创建文件
        File file1 = new File("D:\\java\\tempdirectory\\testDirectory\\childDirectory\\test.txt");
        if (!file1.exists()) {
            try {
                boolean newFile = file1.createNewFile();
                System.out.println("创建文件是否成功:" + newFile);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } else {
            System.out.println("该文件已存在，无需创建");
            System.out.println("文件的绝对路径：" + file1.getAbsolutePath());
            System.out.println("文件的构造路径" + file1.getPath());
            System.out.println("文件的长度：" + file1.length() + "字节");
        }
        System.out.println("=============================");
        //通过递归遍历文件夹，展示该文件夹及子文件夹所有的文件
//        printFile(new File("D:\\java\\tempdirectory"));
        printFile2(new File("D:\\java\\tempdirectory"));
    }

    public static void printFile(File file) {
        if (null != file) {
            if (file.isFile()) {
                System.out.println("这是一个文件：" + file.getName());
            }else {
                //走到这里说明这里是一个文件夹，列出文件，
                System.out.println("这是一个文件夹：" + file.getAbsolutePath());
                File[] files = file.listFiles();
                for (File file1 : files) {
                    printFile(file1);
                }
            }
        }
    }

    public static void printFile2(File file) {
        if (file.isFile()) {
            System.out.println(file.getName());
        }else {
            //在调用listFiles的时候，可以传入一个FileFilter接口，过滤自己想要的文件
            File[] files = file.listFiles(new FileFilter() {
                @Override
                public boolean accept(File file) {
                    return file.getName().endsWith(".java") || file.isDirectory();
                }
            });
            for (File file1 : files) {
                printFile2(file1);
            }
        }
    }
}
